package cn.zn.menu.service;

import cn.zn.menu.dto.RouterDto;
import cn.zn.menu.dto.TreeSelectDto;
import cn.zn.menu.entity.SysMenu;
import cn.zn.user.entity.SysUser;
import cn.zn.menu.vo.SysMenuEditVo;
import cn.zn.menu.vo.SysMenuPageVo;
import com.baomidou.mybatisplus.extension.service.IService;

import java.util.List;
import java.util.Set;

/**
 * <p>
 * 服务类
 * </p>
 *
 * @author zn-admin
 * @since 2021-01-28
 */
public interface SysMenuService extends IService<SysMenu> {

    /**
     * 根据用户ID查询权限
     *
     * @param userId 用户ID
     * @return 权限列表
     */
    Set<String> selectMenuPermsByUserId(String userId, String loginName);

    /**
     * 根据用户ID查询菜单树信息
     *
     * @param userId 用户ID
     * @return 菜单列表
     */
    List<SysMenu> selectMenuTreeByUserId(String userId, String loginName, String[] systemNames);

    /**
     * 根据用户查询系统菜单列表
     *
     * @return 菜单列表
     */
    List<SysMenu> selectMenuList(SysMenuPageVo vo, SysUser theUser);

    /**
     * 构建前端路由所需要的菜单
     *
     * @param menus 菜单列表
     * @return 路由列表
     */
    List<RouterDto> buildMenus(List<SysMenu> menus);

    /**
     * 构建前端所需要下拉树结构
     *
     * @param menus 菜单列表
     * @return 下拉树结构列表
     */
    List<TreeSelectDto> buildMenuTreeSelect(List<SysMenu> menus);

    /**
     * 新增保存菜单信息
     *
     * @param vo 菜单信息
     * @return 结果
     */
    void insertMenu(SysMenuEditVo vo);

    /**
     * 修改保存菜单信息
     *
     * @param vo 菜单信息
     * @return 结果
     */
    void updateMenu(String id, SysMenuEditVo vo);

    /**
     * 删除菜单管理信息
     *
     * @param menuId 菜单ID
     * @return 结果
     */
    void deleteMenuById(String menuId);

}
